<?php

/*
Plugin Name: WP2PCS开发者版
Plugin URI: http://wp2pcs.duapp.com/
Description: 本插件帮助网站站长将网站和百度网盘连接。网站的数据库、日志、网站程序文件（包括wordpress系统文件、主题、插件、上传的附件等）一并上传到百度云盘，站长可以根据自己的习惯定时备份，让你的网站数据不再丢失！可以实现把网盘作为自己的附件存储空间，实现文件、图片、音乐、视频外链等功能。这是一个开发者版，将不适用WP2PCS官方服务，如需个人版，请到http://wp2pcs.duapp.com/下载了解。
Version: 1.1
Author: 否子戈
Author URI: http://www.utubon.com/
*/

define('WP2PCS_PLUGIN_NAME',__FILE__);
define('WP2PCS_PLUGIN_VER','2013.11.25.19.41'); // 以最新一次更新的时间点（到分钟）作为版本号，注意以两位数字作为值

// 先载入一些必要的文件
require(dirname(__FILE__).'/wp2pcs-setup-functions.php');
require(dirname(__FILE__).'/libs/BaiduPCS.class.php');

// 需要经过判断或函数运算才能确定的常量
if(!defined('WP_CONTENT_DIR')){
	define('WP_CONTENT_DIR',trailingslashit(ABSPATH).'wp-content/');
}
define('IS_WP2PCS_WRITABLE',is_really_writable(WP_CONTENT_DIR));

// 下面是备份功能文件
require(dirname(__FILE__).'/wp-backup-database-functions.php');
require(dirname(__FILE__).'/wp-backup-file-functions.php');
require(dirname(__FILE__).'/wp-backup-to-baidu-pcs.php');
// 下面是存储功能文件
require(dirname(__FILE__).'/wp-storage-to-baidu-pcs.php');
require(dirname(__FILE__).'/wp-storage-image-outlink.php');
require(dirname(__FILE__).'/wp-storage-download-file.php');
require(dirname(__FILE__).'/wp-storage-insert-to-content.php');

// 停用插件的时候停止定时任务
register_deactivation_hook(WP2PCS_PLUGIN_NAME,'wp2pcs_plugin_deactivate');
function wp2pcs_plugin_deactivate(){
	// 删除授权TOKEN
	delete_option('wp_to_pcs_app_key');
	delete_option('wp_to_pcs_access_token');
	// 关闭定时任务
	if(wp_next_scheduled('wp_backup_to_pcs_corn_task_database'))
		wp_clear_scheduled_hook('wp_backup_to_pcs_corn_task_database');
	if(wp_next_scheduled('wp_backup_to_pcs_corn_task_logs'))
		wp_clear_scheduled_hook('wp_backup_to_pcs_corn_task_logs');
	if(wp_next_scheduled('wp_backup_to_pcs_corn_task_www'))
		wp_clear_scheduled_hook('wp_backup_to_pcs_corn_task_www');
}

// 添加菜单
if(is_multisite()){
	add_action('network_admin_menu','wp_to_pcs_menu');
	function wp_to_pcs_menu(){
		add_plugins_page('WordPress连接百度云盘','WP2PCS','manage_network','wp2pcs','wp_to_pcs_pannel');
	}
}else{
	add_action('admin_menu','wp_to_pcs_menu');
	function wp_to_pcs_menu(){
		add_plugins_page('WordPress连接百度云盘','WP2PCS','edit_theme_options','wp2pcs','wp_to_pcs_pannel');
	}
}

// 添加更新动作
add_action('init','wp_to_pcs_action');
function wp_to_pcs_action(){
	if(!is_admin() && !current_user_can('edit_theme_options'))return;
	// 提交授权
	if(!empty($_POST) && isset($_POST['page']) && $_POST['page'] == $_GET['page'] && isset($_POST['action']) && $_POST['action'] == 'wp_to_pcs_app_key'){
		check_admin_referer();
		// 检查和更新API KEY
		$app_key = trim($_POST['wp_to_pcs_app_key']);
		if(!$app_key){
			wp_die('请填写API KEY');
			exit;
		}
		update_option('wp_to_pcs_app_key',$app_key);
		if(isset($_POST['wp_to_pcs_access_token']) && !empty($_POST['wp_to_pcs_access_token'])){
			$access_token = trim($_POST['wp_to_pcs_access_token']);
			$pcs = new BaiduPCS($access_token);
			$quota = json_decode($pcs->getQuota());
			if(!$pcs || !$quota || isset($quota->error_code) || $quota->error_code){
				wp_die('Access Token无效，请重新尝试，或直接提交API KEY进行授权！');
				exit;
			}
			update_option('wp_to_pcs_access_token',$access_token);
			wp_redirect(add_query_arg('time',time()));
			exit;
		}
		// 跳转到百度授权中心进行授权
		$back_url = wp_to_pcs_wp_current_request_url(false).'?page='.$_GET['page'];
		$token_url = 'https://openapi.baidu.com/oauth/2.0/authorize?response_type=token&client_id='.$app_key.'&redirect_uri='.urlencode($back_url).'&scope=netdisk&display=page';
		wp_redirect($token_url);
		exit;
	}
	// 更新API KEY
	if(!empty($_POST) && isset($_POST['page']) && $_POST['page'] == $_GET['page'] && isset($_POST['action']) && $_POST['action'] == 'wp_to_pcs_app_key_update' && isset($_POST['wp_to_pcs_app_key_update']) && $_POST['wp_to_pcs_app_key_update'] == '更新'){
		check_admin_referer();
		wp2pcs_plugin_deactivate();// 更新API KEY跟停用插件是一样的
		wp_redirect(add_query_arg('time',time()));
		exit;
	}
	// 授权通过
	if(isset($_GET['access_token']) && !empty($_GET['access_token'])){
		check_admin_referer();
		$access_token = $_GET['access_token'];
		update_option('wp_to_pcs_access_token',$access_token);
		wp_redirect(wp_to_pcs_wp_current_request_url(false).'?page='.$_GET['page'].'&time='.time());
		exit;
	}
}

// 选项和菜单
function wp_to_pcs_pannel(){
	$app_key = get_option('wp_to_pcs_app_key');
	$access_token = get_option('wp_to_pcs_access_token');
?>
<div class="wrap" id="wonderful-links-seo-admin">
	<h2>WP2PCS WordPress连接到百度网盘[开发者版]</h2>
	<div id="application-update-notice" data-version="<?php echo str_replace('.','',WP2PCS_PLUGIN_VER); ?>"></div>
    <div class="metabox-holder">
	<?php if(!$app_key || empty($app_key) || !$access_token || empty($access_token)):  ?>
<script>
// 如果提交APP KEY授权成功，则要跳转到新的页面，但由于授权返回是#的形式，所以只能用javascript接收
var hash = window.location.hash,
	href = window.location.href;
if(hash != undefined && hash != '' && hash.indexOf('access_token') >= 0){
	href = href.replace('#','&');
	document.write('正在处理授权...');
	window.location.href = href;
}
</script>
		<div class="postbox">
		<form method="post" autocomplete="off">
			<h3>百度授权</h3>
			<?php if($app_key || !empty($app_key)){
				echo '<div class="inside" style="border-bottom:1px solid #CCC;margin:0;padding:8px 10px;"><p style="color:red;font-weight:bold;">你已经填写了APP KEY，但它好像不起效。检查你的这个KEY在本域名下是不是合法的，同时看看有没有其他的一些问题。</p></div>';
			} ?>
			<div class="inside" style="border-bottom:1px solid #CCC;margin:0;padding:8px 10px;">
				<p>API KEY：<input type="password" name="wp_to_pcs_app_key" id="wp_to_pcs_app_key" value="<?php echo $app_key; ?>" class="regular-text" /></p>
				<p>Access Token：<input type="password" name="wp_to_pcs_access_token" id="wp_to_pcs_access_token" value="<?php echo $access_token; ?>" class="regular-text" /></p>
				<p><input type="submit" value="提交" class="button-primary" /></p>
				<input type="hidden" name="action" value="wp_to_pcs_app_key" />
				<input type="hidden" name="page" value="<?php echo $_GET['page']; ?>" />
				<?php wp_nonce_field(); ?>
			</div>
			<div class="inside" style="border-bottom:1px solid #CCC;margin:0;padding:8px 10px;">
				<p>要使用百度云盘的开发服务，必须先申请百度开发者api key才能使用你自己的百度PCS服务，请<a href="http://developer.baidu.com/wiki/index.php?title=docs/pcs/guide/api_approve">点击这里</a>了解怎么申请。</p>
				<p>我的建议是：1、登录百度开发者管理中心，创建一个应用，类型为“合作网站”，并验证你的域名；2、创建之后，即可进入该应用，获得APP KEY。3、进入应用管理之后，点击左侧下方的“APP管理-APP列表”，找到“PCS API”，开启它（会提示你为你的网站专门设置一个文件夹——这个文件夹你会在网盘“我的应用数据”中找到，这样可以和其他的网盘文件区分开来）。4、在“API管理-安全设置”中添加当前URL（<?php echo wp_to_pcs_wp_current_request_url(false); ?>）为回调URL，添加当前域名（<?php echo $_SERVER['SERVER_NAME']; ?>）为根域名绑定。</p>
				<p>注意，在提交之后的授权页面，一定要勾选“允许应用在您的百度云创建文件夹并在其中读写数据”，否则是没有授权的。</p>
			</div>
		</form>
		</div>
	<?php else : ?>
<script>
// 如果提交外链授权成功，则要跳转到新的页面，但由于授权返回是#的形式，所以只能用javascript接收
var hash = window.location.hash,
	href = window.location.href;
if(hash != undefined && hash != '' && hash.indexOf('access_token') >= 0){
	document.write('正在处理授权...');
	window.location.href = '<?php echo wp_to_pcs_wp_current_request_url(false)."?page=".$_GET["page"]."&time=".time(); ?>';
}
</script>
		<div class="postbox">
		<form method="post" autocomplete="off">
			<h3>百度授权更新</h3>
			<div class="inside" style="border-bottom:1px solid #CCC;margin:0;padding:8px 10px;">
				<p>或许你在百度开发者中心刷新了自己的应用API信息，如果这样，你就不能正常使用当前的API KEY了，点击下面的按钮删除当前KEY信息，填写新的API KEY。</p>
				<?php
					// 判断是否已经授权，如果quota失败的话，就可能需要重新授权
					$pcs = new BaiduPCS($access_token);
					$quota = json_decode($pcs->getQuota());
					if(!$pcs || !$quota || isset($quota->error_code) || $quota->error_code){
						echo '<p style="color:red;"><b>授权失败，请点击下面的“更新”按钮重新授权！</b></p>';
					}else{
						echo '<p>当前网盘总'.number_format(($quota->quota/(1024*1024)),2).'MB，剩余'.number_format((($quota->quota - $quota->used)/(1024*1024)),2).'MB。请注意合理使用。</p>';
					}
				?>
				<p><input type="submit" name="wp_to_pcs_app_key_update" value="更新" class="button-primary" /></p>
				<input type="hidden" name="action" value="wp_to_pcs_app_key_update" />
				<input type="hidden" name="page" value="<?php echo $_GET['page']; ?>" />
				<?php wp_nonce_field(); ?>
			</div>
		</form>
		</div>
		<?php if(function_exists('wp_backup_to_pcs_panel'))wp_backup_to_pcs_panel(); ?>
		<?php if(function_exists('wp_storage_to_pcs_panel'))wp_storage_to_pcs_panel(); ?>
	<?php endif; ?>
		<div class="postbox">
			<h3>说明</h3>
			<div class="inside" style="border-bottom:1px solid #CCC;margin:0;padding:8px 10px;">
				<p>本插件主要用于将WordPress和百度网盘连接起来，把百度网盘作为WordPress的后备箱。</p>
				<p>本插件主要希望实现以下目标：1、备份WordPress到百度网盘，以免网站数据丢失；2、WordPress中上传的附件等直接上传到百度网盘，并将网盘作为网站的下载空间，实现直链下载、图片外链、音乐视频外链等；3、开发更多的WP2PCS应用，例如可以通过百度网盘手机客户端就可以写文章等创意功能。但明显，功能还不够完善，如果你愿意，可以参与到我们的开发中，请进入下方给出的插件主页和我们联系。</p>
			</div>
			<div class="inside" style="border-bottom:1px solid #CCC;margin:0;padding:8px 10px;">
				<p>插件处于开发阶段，欢迎站长、博主朋友们向我们反馈，提出宝贵意见。</p>
				<p>插件主页：http://wp2pcs.duapp.com</p>
				<p>向插件作者捐赠：<a href="http://me.alipay.com/tangshuang">支付宝</a>、BitCoin（164jDbmE8ncUYbnuLvUzurXKfw9L7aTLGD）</p>
			</div>
		</div>
    </div>
</div>
<script src="http://wp2pcs.duapp.com/application-update-notice-dev.js?ver=<?php date_default_timezone_set("PRC");echo date('Y-m-d-H'); ?>" charset="utf-8"></script>
<?php
}

